package main

import (
	"fmt"
	"time"
)

func main() {
	/*
		go语言提供了一个select的功能，作用channel之上的,多路(IO)复用
		select会随机公平的选择一个case语句执行
		select的应用场景 1、timeout的超时机制 2、判断某个channel被堵塞
	*/
	//timeout := false
	timeout := make(chan bool, 1)
	timeout2 := make(chan bool, 1)
	go func() {
		//该goroutine如果执行时间超过了1s，那么就报告给主的goroutine
		time.Sleep(time.Second * 5)
		timeout <- true
	}()
	go func() {
		//该goroutine如果执行时间超过了1s，那么就报告给主的goroutine
		time.Sleep(time.Second * 1)
		timeout2 <- true
	}()
	//select不会因为<-timeout堵塞而执行不了下面的逻辑
	select {
	case <-timeout:
		fmt.Println("超时了")
	case <-timeout2:
		fmt.Println("超时了")
	default:
		fmt.Println("继续下一次")
	}
}
